print('作者：谭翔中，以在Gitee上开源。\n欢迎使用局域网分享程序。正在导入函数......')



# file_sharer.py  
from http.server import HTTPServer, SimpleHTTPRequestHandler  
import os
import socket  
  
def get_local_lan_ip():  
    try:  
        # 获取主机名  
        host_name = socket.gethostname()  
        # 获取与主机名关联的所有IP地址  
        host_ip = socket.gethostbyname(host_name)  
  
        # 但gethostbyname不总是返回局域网IP，所以尝试使用getaddrinfo  
        # 这会返回一个列表，其中每个元素都是一个元组，包含地址族、socket类型、协议、规范名称和IP地址  
        addrs = socket.getaddrinfo(host_name, None)  
  
        for addr in addrs:  
            # 过滤出IPv4和地址类型为SOCK_STREAM的项（这步实际上可能不是必需的，因为getaddrinfo已经足够具体了）  
            if addr[4][0].startswith('192.168.') or addr[4][0].startswith('10.') or addr[4][0].startswith('172.16.'):  
                # 这里的条件判断是基于私有IP地址的范围，但请注意，这些范围可能并不完整  
                # 比如，172.16.0.0/12实际上涵盖了从172.16.0.0到172.31.255.255的所有地址  
                return addr[4][0]  
  
        # 如果没有找到局域网IP，或者我们的判断条件不够全面，就返回通过gethostbyname得到的IP（可能是公网IP或本地回环地址）  
        return host_ip  
  
    except Exception as e:  
        print(f"Error: Unable to get local IP address. {e}")  
        return None  
  
# 获取并打印局域网IP地址  


print('函数导入完毕，正在获取局域网IPv4......')
local_ip = get_local_lan_ip()
print(f"你的局域网IPv4: {local_ip}")

# 设置HTTP服务器的根目录为D盘中的share_folder文件夹  
root_dir = input('请输入要分享的文件夹。如：D:\\   ：')

os.chdir(root_dir)  # 改变当前工作目录到根目录  
  
# 设置HTTP服务器监听的端口  
PORT = int(input('请输入端口(1000-5555)：'))  
  
# 创建HTTP服务器  
httpd = HTTPServer(('0.0.0.0', PORT), SimpleHTTPRequestHandler)  

print(f"Serving HTTP on 0.0.0.0 port {PORT} (root directory: {root_dir})...请访问{local_ip}:{PORT}。")
print('创建成功，以下是服务器数据。')
httpd.serve_forever()

